package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	base2()
}

func base() {
	// 并发安全集合
	m := sync.Map{}
	// 存储
	m.Store("k1", "v1")

	// 读取
	if value, ok := m.Load("k1"); ok {
		fmt.Println(value)
	}

	// 删除
	m.Delete("k1")
}

func base2() {
	// 并发安全集合
	var m sync.Map = sync.Map{}
	// 遍历10次
	for i := 1; i <= 10; i++ {
		go func(i int) {
			begin := i * 100
			end := begin + 50
			// 每次遍历，追加50个元素
			for j := begin; j < end; j++ {
				m.Store("k"+string(j), "v"+string(j))
			}
			fmt.Println("goroutine", i, "finished, num", begin, end)
		}(i)
	}

	time.Sleep(2 * time.Second)

	// 计算 sync.Map 的长度
	length := 0
	m.Range(func(key, value interface{}) bool {
		length++
		// 如果需要中断迭代，返回 false
		return true
	})

	fmt.Println("Length of sync.Map:", length)

}
